====== Simulation VHDL ======

{{tag>VHDL conception_electronique CAO}}

Utile pour ceux qui débutent en vhdl ou bien qui recherchent une solution libre de développer leurs projets, cette documentation va expliquer brièvement les premiers pas à faire sur Ubuntu. 




===== Simulation avec GHDL, GTKWave =====

{{http://gtkwave.sourceforge.net/splash_512.gif?300x250|GTKWave}}
==== Préparation : ====

=== Utilisation des logiciels libres suivant : ===
   * [[http://ghdl.free.fr|GHDL]] : logiciel libre de simulation de code VHDL
   * [[http://gtkwave.sourceforge.net/|GtkWave]] : logiciel libre de visualisation de simulation

=== Installation : ===
Installez les paquets [[:tutoriel:comment_installer_un_paquet|ghdl]],[[:tutoriel:comment_installer_un_paquet|gtkwave]]

**//* Méthode en ligne de commande//**

Dans votre terminal, saisissez :
<code> sudo apt-get install ghdl gtkwave</code>
**//* Méthode apt//**

Cliquez sur les paquets : **[[apt>ghdl,gtkwave]]**


==== Utilisation : ====
Placez vous dans votre répertoire de travail
<code>cd le/chemin/vers/mon/repertoire/Repertoire_de_Travail</code>

=== Analyse du code VHDL ===
Permet de vérifier la syntaxe du code, les erreurs sont affichées dans le terminal.
<code>ghdl -a monFichier.vhd</code>

=== Compilation ===
Cette étape ne peut se faire qu'une fois le code vérifié et corrigé, si ce n'est pas le cas, ghdl vous le fait remarquer.
On crée ici un fichier exécutable.
<code>ghdl -e monFichier</code>
<note>Attention, ici il ne faut pas d'extension à //monFichier//</note>

=== Simulation ===
Un fois l'exécutable créé, on spécifie un temps de simulation pour l'exécuter. //Remplacez XX par la durée de votre simulation.//
Le fichier vcd créé va nous servir à visualiser nos chronogrammes via GTKWave.
<code>./monFichier --stop-time=XXns --vcd=monFichierSimulation.vcd</code>

=== Visualisation ===
On lance le logiciel gtkwave en lui spécifiant notre fichier de simulation.
<code>gtkwave monFichierSimulation.vcd &</code>
<note>L'ajout des signaux au chronogramme se fait par simple double clic</note>

<note important>Pour ceux qui ont l'habitude de travailler directement sur des cibles type FPGA, dans le cas d'une simulation, il vous faudra impérativement simuler vos signaux d'horloge

Exemple de simulation d'une clock :
<code>
signal clk_simu : std_logic := '0';
constant demiPeriode : time := 10 ns; -- pour une periode de 20ns -> freq 50MHz

p_clk_simu : process is
     begin  
          clk_simu <= '1' after demiPeriode, '0' after 2*demiPeriode;
          wait for 2*demiPeriode; 
 end process p_clk_simu;  
</code>
 </note>